package ChartOfAccount

import (
	"ToolLibray/jwtx"
	"context"
	"fmt"
	"property_api/internal/svc"
	"property_api/internal/types"
	"property_api/utils/result"
	"property_service/property_service"

	"github.com/zeromicro/go-zero/core/logx"
	"property_api/utils/xform"
)

type PagesLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewPagesLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PagesLogic {
	return &PagesLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// Pages 查询资产科目表的分页逻辑
func (l *PagesLogic) Pages(req *types.ChartOfAccountPageReq) (resp *types.PageRes, err error) {
	// 设置租户ID，从上下文中获取
	tenantID := jwtx.GetUserTenantId64(l.ctx)
	// 设置更新用户，从上下文中获取
	userIdStr := xform.Int64ToString(jwtx.GetUserId(l.ctx))

	// 构建查询条件对象，包含所有字段
	where := &property_service.ChartOfAccount{
		ID:                       req.ID,                       // 来源ID
		TenantID:                 tenantID,                     // 租户ID
		AssetID:                  req.AssetID,                  // 资产ID
		FixedAssetSubjectsID:     req.FixedAssetSubjectsID,     // 固定资产科目ID
		FixedAssetSubjectsName:   req.FixedAssetSubjectsName,   // 固定资产科目名称
		DepreciationSubjectsID:   req.DepreciationSubjectsID,   // 累计折旧科目ID
		DepreciationSubjectsName: req.DepreciationSubjectsName, // 累计折旧科目名称
		IsMultiSubject:           req.IsMultiSubject,           // 是否多科目
		SubjectID:                req.SubjectID,                // 科目ID
		UpdatedAtuser:            userIdStr,                    // 更新人
		SubjectName:              req.SubjectName,              //科目名称
		UsageRoomID:              req.UsageRoomId,              //使用科室ID
		UsageRoom:                req.UsageRoom,                //使用科室名称
		Percentage:               req.Percentage,               //占比
	}

	// 调用服务层方法，查询资产科目记录的分页数据
	data, err := l.svcCtx.AssetService.ChartOfAccountPage(l.ctx, &property_service.ChartOfAccountPageReq{
		Page:  req.Page,  // 当前页码
		Limit: req.Limit, // 每页条数
		Where: where,     // 查询条件
	})

	//判断是否为多科目 如果IsMultiSubject值为1 那么则查询子集
	if req.IsMultiSubject == 1 {
		//赋值判断Count的长度
		fmt.Println("data", data)
		//循环赋值将data.List里面的数值重新赋值
		var liss []*types.ChartOfAccount
		for _, ls := range data.List {
			//判断是否为多科目
			if ls.IsMultiSubject == 1 {
				//通过ls.ID去获取Children
				chid, err := l.svcCtx.AssetService.ChartMultiSubjectPage(l.ctx, &property_service.ChartMultiSubjectPageReq{
					Page:  req.Page,  // 当前页码
					Limit: req.Limit, // 每页条数
					Where: &property_service.ChartMultiSubject{
						TenantID:   tenantID,
						AccountsID: ls.ID,
					}, // 查询条件
				})
				if err == nil {
					// 转换 Children 列表
					var children []*types.ChartMultiSubject
					for _, item := range chid.List {
						fmt.Println("添加item", item)
						children = append(children, &types.ChartMultiSubject{
							ID:            item.ID,
							AccountsID:    item.AccountsID,   // 资产科目ID
							SubjectsID:    item.SubjectsID,   // 固定资产科目ID
							SubjectsName:  item.SubjectsName, // 固定资产科目名称
							TenantID:      tenantID,          // 租户ID
							CreatedAtuser: userIdStr,         // 创建人
							UpdatedAtuser: userIdStr,         // 更新人
						})
					}
					liss = append(liss, &types.ChartOfAccount{
						ID:                       ls.ID,
						AssetID:                  ls.AssetID,                  // 资产ID
						FixedAssetSubjectsID:     ls.FixedAssetSubjectsID,     // 固定资产科目ID
						FixedAssetSubjectsName:   ls.FixedAssetSubjectsName,   // 固定资产科目名称
						DepreciationSubjectsID:   ls.DepreciationSubjectsID,   // 累计折旧科目ID
						DepreciationSubjectsName: ls.DepreciationSubjectsName, // 累计折旧科目名称
						IsMultiSubject:           ls.IsMultiSubject,           // 是否多科目
						SubjectID:                ls.SubjectID,                // 科目ID
						TenantID:                 tenantID,                    // 租户ID
						CreatedAtuser:            userIdStr,                   // 创建人
						UpdatedAtuser:            userIdStr,                   // 更新人
						Children:                 children,
					})
				}
			} else {
				liss = append(liss, &types.ChartOfAccount{
					ID:                       ls.ID,
					AssetID:                  ls.AssetID,                  // 资产ID
					FixedAssetSubjectsID:     ls.FixedAssetSubjectsID,     // 固定资产科目ID
					FixedAssetSubjectsName:   ls.FixedAssetSubjectsName,   // 固定资产科目名称
					DepreciationSubjectsID:   ls.DepreciationSubjectsID,   // 累计折旧科目ID
					DepreciationSubjectsName: ls.DepreciationSubjectsName, // 累计折旧科目名称
					IsMultiSubject:           ls.IsMultiSubject,           // 是否多科目
					SubjectID:                ls.SubjectID,                // 科目ID
					TenantID:                 tenantID,                    // 租户ID
					CreatedAtuser:            userIdStr,                   // 创建人
					UpdatedAtuser:            userIdStr,                   // 更新人
					Children:                 nil,
				})
			}
		}
		fmt.Println("liss", liss)
		return &types.PageRes{
			Count: data.Count,
			List:  liss,
		}, nil
	}

	// 返回分页数据的响应
	return result.SucPage(data, types.ChartOfAccount{}).PageEd()
}
